package boundary;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.JOptionPane;
import desktop_codebehind.Car;
import desktop_resources.GUI;
import entity.Spiller;
import static entity.GameBoard.*;

public class Adapter 
{

	private static Locale currentLocale;
	private static String country;
	private static String language;
	private static String[] fieldDesc, fieldSubtitle, fieldTitle;
	private static ResourceBundle msg;

	public Adapter()
	{
	}

	/**
	 * Opsætter programmet til det specificerede sprog (fra prompten). Såfremt intet sprog er specificeret kører programmet på dansk.
	 * Herefter kan de ønskede tekst-strenge (Strings) hentes vha. msg.getString("Keyword")
	 * @param args Det ønskede sprog; args[0] = language, args[1] = country (f.eks. args[0] = "en", args[1] = "UK"
	 */
	public static void language(String[] args){
		if (args.length != 2){
			currentLocale = new Locale("da", "DK"); // Standardsproget er dansk
		}
		else if (args.length == 2) { // Det er muligt at ændre sproget når man afvikler programmet i prompten f.eks. "java VORESSPIL.jar en UK" som vil køre programmet på engelsk
			language = args[0];
			country = args[1];
			currentLocale = new Locale(language, country);
		}		
		msg = ResourceBundle.getBundle("boundary.MessagesBundle", currentLocale);
	}

	/**
	 * Returnerer array af Strings indeholdende beskrivelser af felterne
	 * @return Pegepind til array af String indeholdende feltbeskrivelser
	 */
	public static String[] getFieldDesc(){
		fieldDesc = new String[22];
		fieldDesc[0] = msg.getString("Desc_00");
		fieldDesc[1] = msg.getString("Desc_01");
		fieldDesc[2] = msg.getString("Desc_02");
		fieldDesc[3] = msg.getString("Desc_03");
		fieldDesc[4] = msg.getString("Desc_04");
		fieldDesc[5] = msg.getString("Desc_05");
		fieldDesc[6] = msg.getString("Desc_06");
		fieldDesc[7] = msg.getString("Desc_07");
		fieldDesc[8] = msg.getString("Desc_08");
		fieldDesc[9] = msg.getString("Desc_09");
		fieldDesc[10] = msg.getString("Desc_10");
		fieldDesc[11] = msg.getString("Desc_11");
		fieldDesc[12] = msg.getString("Desc_12");
		fieldDesc[13] = msg.getString("Desc_13");
		fieldDesc[14] = msg.getString("Desc_14");
		fieldDesc[15] = msg.getString("Desc_15");
		fieldDesc[16] = msg.getString("Desc_16");
		fieldDesc[17] = msg.getString("Desc_17");
		fieldDesc[18] = msg.getString("Desc_18");
		fieldDesc[19] = msg.getString("Desc_19");
		fieldDesc[20] = msg.getString("Desc_20");
		fieldDesc[21] = msg.getString("Desc_21");
		return fieldDesc;
	}

	/**
	 * Returnerer array af Strings indeholdende subtitle til felterne
	 * @return Pegepind til array af String indeholdende subtitles til felterne
	 */
	public static String[] getFieldSubtitle(){
		fieldSubtitle = new String[22];
		fieldSubtitle[0] = msg.getString("Sub_Start");
		fieldSubtitle[1] = msg.getString("Sub_Price");
		fieldSubtitle[2] = msg.getString("Sub_Price");
		fieldSubtitle[3] = msg.getString("Sub_Price");
		fieldSubtitle[4] = msg.getString("Sub_Price");
		fieldSubtitle[5] = msg.getString("Sub_Price");
		fieldSubtitle[6] = msg.getString("Sub_Price");
		fieldSubtitle[7] = msg.getString("Sub_Price");
		fieldSubtitle[8] = msg.getString("Sub_Price");
		fieldSubtitle[9] = msg.getString("Sub_Price");
		fieldSubtitle[10] = msg.getString("Sub_Price");
		fieldSubtitle[11] = msg.getString("Sub_Price");
		fieldSubtitle[12] = msg.getString("Sub_Recieve");
		fieldSubtitle[13] = msg.getString("Sub_Recieve");
		fieldSubtitle[14] = msg.getString("Sub_Price");
		fieldSubtitle[15] = msg.getString("Sub_Price");
		fieldSubtitle[16] = msg.getString("Sub_Tax2");
		fieldSubtitle[17] = msg.getString("Sub_Tax");
		fieldSubtitle[18] = msg.getString("Sub_Price");
		fieldSubtitle[19] = msg.getString("Sub_Price");
		fieldSubtitle[20] = msg.getString("Sub_Price");
		fieldSubtitle[21] = msg.getString("Sub_Price");
		return fieldSubtitle;
	}

	/**
	 * Returnerer array af Strings indeholdende titler til felterne
	 * @return Pegepind til array af String indeholdende felttitlerne
	 */
	public static String[] getFieldTitle(){
		fieldTitle = new String[22];
		fieldTitle[0] = msg.getString("Title_00");
		fieldTitle[1] = msg.getString("Title_01");
		fieldTitle[2] = msg.getString("Title_02");
		fieldTitle[3] = msg.getString("Title_03");
		fieldTitle[4] = msg.getString("Title_04");
		fieldTitle[5] = msg.getString("Title_05");
		fieldTitle[6] = msg.getString("Title_06");
		fieldTitle[7] = msg.getString("Title_07");
		fieldTitle[8] = msg.getString("Title_08");
		fieldTitle[9] = msg.getString("Title_09");
		fieldTitle[10] = msg.getString("Title_10");
		fieldTitle[11] = msg.getString("Title_11");
		fieldTitle[12] = msg.getString("Title_12");
		fieldTitle[13] = msg.getString("Title_13");
		fieldTitle[14] = msg.getString("Title_14");
		fieldTitle[15] = msg.getString("Title_15");
		fieldTitle[16] = msg.getString("Title_16");
		fieldTitle[17] = msg.getString("Title_17");
		fieldTitle[18] = msg.getString("Title_18");
		fieldTitle[19] = msg.getString("Title_19");
		fieldTitle[20] = msg.getString("Title_20");
		fieldTitle[21] = msg.getString("Title_21");
		return fieldTitle;
	}

	/**
	 * Viser option-box hvor man kan vælge hvor mange spillere der skal være med (2-6).
	 * @return Antal spillere valgt
	 */
	public static int jOption()
	{
		String[] choices = {"2","3","4","5","6"};

		String input = (String) JOptionPane.showInputDialog(null, msg.getString("Choose_Players"),
				msg.getString("Welcome"), JOptionPane.QUESTION_MESSAGE, null, choices, choices[0]);
		int i = Integer.parseInt(input);  // Laver String'en, som JOptionalPane returnerer, om til en int.
		return i;
	}

	public static void removeOwner(int fieldNumber) {
		GUI.removeOwner(fieldNumber);
	}

	/**
	 * Sæt en bil på GUI'en
	 * @param fieldNumber Feltets nummer
	 * @param name Navnet på spilleren
	 */
	public static void setCar(int fieldNumber, String name) {
		GUI.setCar(fieldNumber, name);
	}

	/**
	 * Viser værdien af et terningeslag
	 * @param faceValue1 Antal øjne for terning 1
	 * @param rotation1
	 * @param x1 Terning 1's x-koordinat på spillepladen
	 * @param y1 Terning 1's y-koordinat på spillepladen
	 * @param faceValue2 Antal øjne for terning 2
	 * @param rotation2 Terning 2's rotation
	 * @param x2 Terning 2's 1's x-koordinat på spillepladen
	 * @param y2 Terning 2's y-koordinat på spillepladen
	 */
	public static void setDice(int faceValue1, int rotation1, int x1, int y1,
			int faceValue2, int rotation2, int x2, int y2) {
		GUI.setDice(faceValue1, rotation1, x1, y1, faceValue2, rotation2, x2, y2);
	}

	/**
	 * Opdaterer spillerens balance på GUI
	 * @param name Spillerens navn
	 * @param newBalance Spillerens balance
	 */
	public static void setBalance(String name, int newBalance) {
		GUI.setBalance(name, newBalance);
	}

	/**
	 * Tilføjer en spiller med bil på GUI
	 * @param name Spillerens navn
	 * @param balance Spillerens balance
	 * @param car Spillerens bil (objekt af typen Car)
	 */
	public static void addPlayer(String name, int balance, Car car) {
		GUI.addPlayer(name, balance, car);
	}

	/**
	 * Fjerner en spillers bil fra et specifikt felt
	 * @param fieldNumber Feltets nummer på pladen
	 * @param name Navnet på spilleren hvis bil skal fjernes
	 */
	public static void removeCar(int fieldNumber, String name) {
		GUI.removeCar(fieldNumber, name);
	}

	/**
	 * Sæt en ejer på et felt på GUI. Ændrer border på feltet til spillerens farve, samt skriver spillerens navn som subText.
	 * @param fieldNumber Feltnummer på pladen
	 * @param name Spillerens navn
	 */
	public static void setOwner(int fieldNumber, String name) {
		GUI.setOwner(fieldNumber, name);
	}

	/**
	 * Sæt subtext på felt på GUI
	 * @param fieldNumber Feltnummer på pladen
	 * @param subText Teksten der skal vises
	 */
	public static void setSubText(int fieldNumber, String subText) {
		GUI.setSubText(fieldNumber, subText);
	}

	/**
	 * Viser feltbeskrivelsen for det felt hvor spilleren står
	 * @param spiller Spilleren som er landet på feltet
	 */
	public static void showFieldDesc(Spiller spiller){
		GUI.showMessage(field[spiller.getPosition()-1].getDesc());
	}

	/**
	 * Viser på GUI at spiller skal indstaste spillernavn.
	 * @return
	 */
	public static String showTypeName(){
		String i = GUI.getUserString(msg.getString("Enter_Player_Name"));
		return i;
	}

	/**
	 * Viser på GUI valgmulighederne mellem bil typerne.
	 * @return
	 */
	public static int chooseCar(){
		int i = 4;
		String type = GUI.getUserButtonPressed(msg.getString("Choose_Car"), msg.getString("RaceCar"), msg.getString("Ufo"), msg.getString("Tractor"), msg.getString("Car"));
		if (type == msg.getString("RaceCar")){
			i = 1;
		}
		if (type == msg.getString("Ufo")){
			i = 2;
		}
		if (type == msg.getString("Tractor")){
			i = 3;
		}
		if (type == msg.getString("Car")){
			i = 4;
		}
		return i;
	}

	/**
	 * Viser på GUI at spilleren skal trykke OK for at slå med terningerne
	 * @param name Spillerens navn
	 */
	public static void rollDice(String name){
		GUI.showMessage(name+ " " + msg.getString("Roll_Dice"));
	}

	/**
	 * Viser på GUI hvilken spiller der har vundet.
	 * @param name Navnet på spilleren der har vundet.
	 */
	public static void winner(String name){
		GUI.showMessage(msg.getString("Grats") + name + ". " + msg.getString("You_Won"));
	}

	public static void draw(String name){
		GUI.showMessage(msg.getString("Grats") + name + msg.getString("You_Won"));
	}

	/**
	 * Viser på GUI om man har lyst til at købe et felt. 
	 * @return
	 */
	public static boolean buyField(){
		String i = GUI.getUserSelection(msg.getString("Buy_Field"), msg.getString("Yes"), msg.getString("No"));
		if (i == msg.getString("Yes")){
			return true; }
		else {
			return false;}
	}

	/**
	 * Viser på GUI "Cannot Afford" hvis man ikke har råd til at købe det givne felt.
	 */
	public static void cannotAfford(){
		GUI.showMessage(msg.getString("Cannot_Afford"));
	}

	/**
	 * Viser på GUI hvis man lander på sit eget felt.
	 */
	public static void yourField(){
		GUI.showMessage(msg.getString("Your_Field"));
	}

	/**
	 * Viser på GUI valgmuligheden mellem at betale skat (tax) eller feltets anden konsekvens.
	 * @param cnsq
	 * @param value
	 * @return
	 */
	public static boolean taxAmount(int cnsq, int value){
		String n = String.valueOf(cnsq);
		String i = GUI.getUserSelection(msg.getString("Tax"), n, msg.getString("10PCT") + value);
		if (i == n){
			return true;
		}
		else {
			return false;
		}
	}

	/**
	 * Viser en besked hvis en fejl opstår i programmet og lukker programmet.
	 */
	public static void error(){
		System.out.println(msg.getString("Error"));
		GUI.showMessage(msg.getString("Error"));
		GUI.close();
		System.exit(0);
	}
	
	/**
	 * Returnerer teksten for keyword "Player"
	 * @return String for keyword "Player"
	 */
	public static String player(){
		return msg.getString("Player");
	}
}
